package com.examination.client.redis;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * redis操作工具
 * Created by liangtao on 2020/3/11
 */
public interface RedisDao {

    /**
     * 如果存在插入记录并返回成功，如果不存在，返回false
     * @param key   key
     * @param value value
     * @return      是否存在
     */
    boolean hasKeyAndValue(String key, String value);

    /**
     * 对已存在key重新设置失效时间
     * @param key       key
     * @param timeOut  失效时间
     * @param timeUnit 单位
     */
    void setExpire(String key, long timeOut, TimeUnit timeUnit);

    /**
     * 根据key获取value
     * @param key key
     * @return    value
     */
    String getValue(String key);

    /**
     *
     * @param key      key
     * @param value    value
     * @param timeOut  失效时间
     * @param timeUnit 时间单位
     */
    void setKeyValue(String key, String value, int timeOut, TimeUnit timeUnit);

    /**
     * 存放hashMap
     * @param key key
     * @param map hashMap
     */
    void setHashMap(String key, Map<String, Object> map);

    /**
     * 判断key是否存在
     * @param key  key
     * @return     是否存在
     */
    boolean hasKey(String key);

    /**
     *
     * @param rkey redisKey
     * @param mkey mapKey
     * @return     值
     */
    Object getHashMapValue(String rkey, String mkey);

    /**
     *
     * @param rkey  redisKey
     * @param mkey  mapKey
     * @return      是否存在
     */
    boolean hasHashMapKey(String rkey, String mkey);

    /**
     * 存放list
     * @param key key
     * @param list list
     */
    void setHashList(String key, List<String> list);

    /**
     * 将某个值存放至list中
     * @param key    key
     * @param value  value
     */
    void setHashListValue(String key, String value);

    /**
     * 获取list
     * @param key key
     * @return    list
     */
    List<String> getHashList(String key);

    /**
     * 删除key
     * @param key key
     */
    void deleteKey(String key) throws Exception;

}
